package practico.patronDAO.impl;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import practico.entidades.Administrador;
import practico.entidades.Cliente;
import practico.entidades.Transportista;
import practico.entidades.Usuario;
import practico.patronDAO.UsuarioDAO;

@Component
public class UsuarioHibernateDAO implements UsuarioDAO {

	private SessionFactory sessionFactory;
	
	@Autowired(required = true)
	  public void setSessionFactory(SessionFactory factory) {
		    this.sessionFactory = factory;
		  }

	  private Session getCurrentSession() {
	    return sessionFactory.getCurrentSession();
	  }


	@SuppressWarnings("unchecked")
	@Override
	public Usuario validarUsuario(String usuario, String password) {
	    List <Usuario> list = getCurrentSession().createQuery("FROM Usuario WHERE usuario='"+usuario+"' and password='"+password+"'").list();
	    if(list.size()==1){
	    	int id = list.get(0).getId();
	    	Usuario usuarioRetorno = (Usuario) getCurrentSession().get(Cliente.class, id);
	    	if(usuarioRetorno!=null) return usuarioRetorno;
	    	else{
	    		usuarioRetorno = (Usuario) getCurrentSession().get(Transportista.class, id);
	    		if(usuarioRetorno!=null) return usuarioRetorno;
	    		else{
	    			return (Usuario) getCurrentSession().get(Administrador.class, id);
	    		}
	    	}
	  
	    }
	    else return null;

	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Transportista> buscarTransportistas() {
		Query query= getCurrentSession().createQuery("FROM Transportista");
		return query.list();
	}

	@Override
	public void crearTransportista(Transportista t1) {
		getCurrentSession().saveOrUpdate(t1);

	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Cliente> buscarClientes() {
		Query query= getCurrentSession().createQuery("FROM Cliente");
		return query.list();
	}

}
